package webbrow.board.guest.controller;


import java.util.List;

import javax.annotation.Resource;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import webbrow.board.component.BoardGuestService;
import webbrow.board.vo.BoardGuestVO;
import webbrow.board.vo.SearchCommand;

@Controller
public class BoardGuestController {
	@Resource(name="boardGuestService")
	private BoardGuestService boardGuestService;

	/**
	 * 경로이동으로 글 목록정보를 5개 가져오는 메서드
	 * 세션이 존재하면 회원방명록 페이지로 출력하고,
	 * 세션이 존재하지 않으면 비로그인방명록 페이지로 출력한다.
	 */
	@RequestMapping("/boardGuest.inven")
	public ModelAndView getAllGuestBoard(HttpSession session, int low, int high) throws Exception {
		String path = "list_guest.wide";
		if(session.getAttribute("mvo") != null){
			path = "list_member.wide";
		}
		List<BoardGuestVO> list = 
				(List<BoardGuestVO>) boardGuestService.getPlusAllBoard(low, high);
		return new ModelAndView(path, "list", list);
	}
	
	/**
	 * ajax 로 글 목록정보를 5개 가져오는 메서드
	 * @param low
	 * @param high
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/boardPlusAllBoard.inven")
	@ResponseBody
	public List<BoardGuestVO> getPlusAllBoard(int low, int high) throws Exception {
		List<BoardGuestVO> list = 
				(List<BoardGuestVO>) boardGuestService.getPlusAllBoard(low, high);
		return list;
	}
	
	
	public ModelAndView searchByKeyword(SearchCommand command) {
		return null;
	}
	
	
	/**
	 * 모든 사용자가 글 등록시 메서드 실행
	 * @param vo
	 * @return
	 * @throws Exception 
	 */
	@RequestMapping("/writeGuestBoard.inven")
	@ResponseBody
	public List<BoardGuestVO> writeGuestBoard(BoardGuestVO vo, int low, int high) throws Exception {
		System.out.println(vo);
		boardGuestService.writeGuestBoard(vo);
		List<BoardGuestVO> list = 
				(List<BoardGuestVO>) boardGuestService.getPlusAllBoard(low, high);
		System.out.println("controller : "+list);
		return list;
		
	}
	
	/**
	 * 비회원 사용자가 글을 삭제할 시 실행되는 메서드
	 * 글 번호를 받아 삭제 (패스워드 체크는 미리 선행) 
	 * 삭제한 뒤 게시물의 리스트 정보를 경로를 재설정해 보낸다.
	 * @param no
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/deleteGuestBoard.inven")
	public ModelAndView deleteGuestBoard(int no, int low, int high) throws Exception {
		boardGuestService.deletePost(no);
		List<BoardGuestVO> list = 
				(List<BoardGuestVO>) boardGuestService.getPlusAllBoard(low, high);
		return new ModelAndView("list_guest.wide", "list", list);
	}
	
	/**
	 * 회원이 글을 삭제할 시 실행되는 메서드
	 * 삭제한 뒤 게시물의 리스트 정보를 ajax 를 사용하여 보낸다.
	 * @param no
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/deleteMemberBoard.inven")
	@ResponseBody
	public List<BoardGuestVO> deleteMemberBoard(int no, int low, int high) throws Exception {
		boardGuestService.deletePost(no);
		List<BoardGuestVO> list = 
				(List<BoardGuestVO>) boardGuestService.getPlusAllBoard(low, high);
		return list;
	}
	
	/**
	 * 비회원이 글 수정, 삭제할 시 비밀번호 체크하는 메서드
	 * @param vo
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/checkGuestPassword.inven")
	@ResponseBody
	public String checkGuestPassword(BoardGuestVO vo) throws Exception {
		// 패스워드의 존재여부를 확인하여 true or false 로 반환한다.
		String result = boardGuestService.checkGuestPassword(vo);
		return result;
	}
	
	/**
	 * 수정할 시 수정폼에 해당 번호의 정보를 보여주는 메서드 
	 * ajax 로 상세정보를 보여준다.
	 * @param no
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/detailBoard.inven")
	@ResponseBody
	public BoardGuestVO detailBoard(int no) throws Exception {
		BoardGuestVO vo = boardGuestService.detailView(no);
		return vo;
	}
	
	/**
	 * 비회원이 글을 수정할 시 실행되는 메서드
	 * 수정한 뒤 게시물의 리스트 정보를 ajax 로 사용하여 보낸다.
	 * @param vo
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/updateGuestBoard.inven")
	@ResponseBody
	public List<BoardGuestVO> updateGuestBoard(BoardGuestVO vo, int low, int high) throws Exception {
		System.out.println("controller update : "+vo);
		boardGuestService.updateGuestBoard(vo);
		List<BoardGuestVO> list = 
				(List<BoardGuestVO>) boardGuestService.getPlusAllBoard(low, high);
		return list;
	}

}
